#pragma once

#include <string>
#include <Windows.h>

class Logger
{
public:
	enum MessageType
	{
		mtDebug, mtInfo, mtWarning, mtError, mtFatal
	};

	void Debug(const std::string& message) { LogMessage(mtDebug, message); }
	void Info(const std::string& message) { LogMessage(mtInfo, message); }
	void Warn(const std::string& message) { LogMessage(mtWarning, message); }
	void Error(const std::string& message) { LogMessage(mtError, message); }
	void Fatal(const std::string& message) { LogMessage(mtFatal, message); }
protected:
	virtual void LogMessage(MessageType msgType, const std::string& message) = 0;
};

class NullLogger : public Logger
{
protected:
	virtual void LogMessage(MessageType msgType, const std::string& message)
	{
		OutputDebugStringA(message.c_str());
	}
};